Aller au contenu principal

SDK iOS

Ajoutez AR Clip VPS à une application iOS native. Le SDK s'appuie sur le suivi ARKit pour trouver la position de l'utilisateur sur vos cartes VPS. C'est un XCFramework qui fonctionne dans les applications UIKit, RealityKit et SwiftUI.

Avant de commencer​

  • iOS 15.0 ou plus récent
  • Xcode 14 ou plus récent (Swift 5.7 ou plus récent)
  • Un appareil capable de faire tourner ARKit. Le simulateur n'est pas pris en charge.

Installation​

Deux méthodes au choix.

Swift Package Manager​

  1. Dans Xcode, choisissez File → Add Packages….
  2. Saisissez https://github.com/WebAR-Studio/was-vps-ios.git.
  3. Choisissez la branche ou le tag voulu et ajoutez le package à votre target.

Installation manuelle​

  1. Clonez le dépôt :
    git clone https://github.com/WebAR-Studio/was-vps-ios.git
  2. Faites glisser WASVPS.xcframework dans votre projet.
  3. Dans General → Frameworks, Libraries, and Embedded Content, vérifiez que le framework est bien intégré (embedded).

Ajouter les autorisations​

Ajoutez à Info.plist les descriptions d'usage de la caméra et de la localisation, pour qu'iOS puisse demander l'accès à l'utilisateur.

<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera to display augmented reality content.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to your location to place AR content accurately.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>VPSLocalization</key>
<string>Enable precise location for accurate AR content positioning.</string>
</dict>

Lancer le VPS​

Appelez VPSBuilder.initializeVPS pour créer un VPSService. Passez-lui l'ARSession, votre clé d'API et vos identifiants de lieu.

Besoin d'une clé d'API ?

Obtenez-en une sur arclip.design ou écrivez à support@arclip.design.

import ARKit
import WASVPS

final class VPSDemoController: UIViewController, ARSCNViewDelegate {
@IBOutlet private weak var sceneView: ARSCNView!
private var configuration: ARWorldTrackingConfiguration?
private var vps: VPSService?

override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene()

configuration = VPSBuilder.getDefaultConfiguration()

VPSBuilder.initializeVPS(
arSession: sceneView.session,
apiKey: "your-api-key",
locationIds: ["your-location-id"],
url: "https://api.arclip.app/vps/api/v3",
gpsUsage: false,
delegate: self
) { service in
self.vps = service
self.vps?.start()
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let configuration { sceneView.session.run(configuration) }
}

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
vps?.frameUpdated()
}
}

extension VPSDemoController: VPSServiceDelegate {
func positionVPS(pos: ResponseVPSPhoto) {
print("Localized pose:", pos)
}

func error(err: NSError) {
print("VPS error:", err)
}

func sending(requestData: UploadVPSPhoto?) {
print("Sending localization request…")
}
}

Mettez le service en pause dans sessionWasInterrupted et relancez-le dans sessionInterruptionEnded.

RealityKit​

Avec RealityKit, transmettez les images dans ARSessionDelegate :

func session(_ session: ARSession, didUpdate frame: ARFrame) {
vps?.frameUpdated()
}

Les appels de cycle de vie (start, stop, clearCustomLocPos) sont les mêmes qu'avec SceneKit.

SwiftUI​

Encapsulez ARSCNView ou ARView dans UIViewRepresentable ou UIViewControllerRepresentable. Gardez VPSService dans un view model partagé, et appelez start() / stop() depuis vos contrôles SwiftUI.

Autres options​

  • Fournissez une transformation connue avant la première localisation avec setCustomLocPosForFirstRequest.
  • Utilisez un autre endpoint en passant une autre url à initializeVPS.
  • Activez gpsUsage pour inclure les coordonnées de l'appareil dans les requêtes.

Dépannage​

  • Si VPSBuilder.getDefaultConfiguration() renvoie nil, l'appareil n'est pas pris en charge.
  • Si les callbacks ne se déclenchent jamais, vérifiez que frameUpdated() est appelé à chaque image, et que votre clé d'API et vos identifiants de lieu sont valides.
  • Le dossier /examples contient des exemples UIKit, RealityKit et SwiftUI.